iT邦幫忙

2021 iThome 鐵人賽

DAY 12
0
自我挑戰組

Be friend with JavaScript系列 第 12

Day 12 - var 、let、const

  • 分享至 

  • xImage
  •  
  • var 為全域變數,超不謹慎,宣告變數後值可被改變,也可以重複宣告。
  • let 為區域變數,較謹慎,宣告變數後,其值可被改變,不可重複宣告。
  • const 唯讀,較嚴格,宣告後,其值不可變動,也不可重複宣告,但在物件或陣列時,可修改裡面的內容。

而 let 和 const 如果離開了宣告的區域 { },變數就不存在。

var

可重新賦予值,也可重複宣告

var z = 10;
var z = 30000;
console.log(z); // 30000

let

宣告變數後,可重新賦予值,且前面不用再加 let (因為已宣告過),只須給等號重新賦予值

let a=20;
a=40;
console.log(a); // 40

const

不可重新賦予值

const b=1;
console.log(b);
b=3; // 會報錯,因為 const 的值不可被修改
  • const可修改物件或陣列裡的屬性值
const obj = {
    mail:'abc123456@gmail.com'
};
obj.mail = 'abcdefg@gmail.com'
console.log(obj.mail) // abcdefg@gmail.com
  • 若不想被修改,可使用 凍結語法 Object.freeze()
const obj = {
    mail:'abc123456@gmail.com'
};
Object.freeze(obj) // 凍結物件後,其內容就不能被修改
obj.mail = 'abcdefg@gmail.com'
console.log(obj.mail) // abc123456@gmail.com

凍結後,改變值不會有任何效果


最後用程式碼來比較一下三者的差異:

  • initializer(初始化)
    只有 const 需要 initializer , var 和 let 不需要
    白話文:var 和 let 可以在宣告變數時不賦予值,但 const 在宣告時就必須賦予值給它,否則會出錯。
var x;
console.log(x); // undefined
let y;
console.log(y); // undefined
const z;
console.log(z); // Uncaught SyntaxError: Missing initializer in const declaration 
  • re-declaration(重複宣告)
    只有 var 可以 re-declaration,let 和 const 不行。
    所以要避免使用 var!!!!!
var x = 10;
var x = 20;
console.log(x); // 20
let y = 10;
let y = 20;
console.log(y); // Uncaught SyntaxError: Identifier 'x' has already been declared 
const z = 10;
const z = 20;
console.log(z); // Uncaught SyntaxError: Identifier 'y' has already been declared
  • re-assignment(重新賦予值)
    var,let 可以 re-assignment,const 不行
var x = 10;
x = 20;
console.log(x); // 20
let y = 10;
y = 20;
console.log(y); // 20
const z = 10;
z = 20;
console.log(z); // Uncaught TypeError: Assignment to constant variable. 

總結一下~
固定不變的東西,變數用 const 宣告,會改變的用 let,沒事別用 var。


上一篇
Day 11 - BOM (Browser Object Model)
下一篇
Day 13 - Spread Operator & Rest Operator
系列文
Be friend with JavaScript39
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言